
import {Native} from "./native.js";

/**
 * 安卓系统通知相关操作
 * @version 2
 * @author GuoHua Liu
 * @copyright Copyright © 2019 GuoHua Liu. All rights reserved.
 */
class notificationA {
    /**
     * @private
     * @param {string} name
     * @param {function} onevent
     * @param {*} context
     */
    static addObserver(name, onevent, context) {
        Native.getInstance().addObserver("notification/" + name, onevent, context);
        return this;
    }

    /**
     * @private
     * @param {string} name
     * @param {function} onevent
     */
    static removeObserver(name, onevent) {
        Native.getInstance().delObserver("notification/" + name, onevent);
        return this;
    }

    /**
     * @callback NotificationRecvObserver
     * @param {{name:string,data:{data:{packet:string,title:string,content:string,postTime:number}}}} event
     * 常用的packet（发送通知的app包名）
     * - QQ com.tencent.mobileqq
     * - 微信 com.tencent.mm
     * - facebook com.facebook.katana
     */

    /**
     * 添加观察者：接收通知
     * @since 2
     * @param {NotificationRecvObserver} onevent
     * @param {*} context
     */
    static addRecvObserver(onevent, context=null) {
        this.addObserver("recv", onevent, context);
        if (!this.__recvObserveCount) {
            this.__recvObserveCount = 1;
            if (Native.getInstance().isAndroid()) {
                Native.getInstance().callNative("notification", {method: "bind"});
            }
        } else {
            this.__recvObserveCount ++;
        }
        return this;
    }

    /**
     * 删除addRecvObserver注册的观察者
     * @since 2
     * @param {NotificationRecvObserver|null} onevent
     */
    static removeRecvObserver(onevent = null) {
        this.removeObserver("recv", onevent);
        if (this.__recvObserveCount && this.__recvObserveCount > 0) {
            this.__recvObserveCount--;

        }
        return this;
    }

    /**
     * 跳转系统设置页面，请求用户授予通知使用权。因为我们用js处理后台事件的特殊性，
     * 为了用户获得更及时的通知体验，可以提示用户不要杀app，保存app后台运行。
     * @returns {Promise} 错误码列表：
     * - -1 环境不支持
     * - 1 通知使用权尚未打开
     * - 其他 未知错误
     */
    static enable() {
        return new Promise((resolve,reject)=>{
            if (Native.getInstance().isAndroid()) {
                Native.getInstance().callNative("notification", {method: "enable"}, true, resolve, reject);
            } else {
                reject({errMsg: "当前环境不支持", errCode: -1});
            }
        });
    }

    /**
     * 判断是否已经打开通知授权
     * @returns {boolean}
     * - true 通知使用权已经打开
     * - false 通知使用权尚未打开
     */
    static isEnabled() {
        if (Native.getInstance().isAndroid()) {
            return Native.getInstance().syncCallNative("notification", {method: "isEnabled"}).isEnabled;
        }
        return false;

    }
}

export {notificationA};
//
